package demo7;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Spring容器管理对象时,一个对象生命周期的对应节点相关操作
 */
@Component
public class Person {

    private String name;

    public Person(){
        System.out.println("1:Person的构造器被调用了");
    }
    public String getName(){
        return name;
    }
    @Value("张三")
    public void setName(String name){
        System.out.println("2:name的set方法调用了,初始化了name属性");
        this.name = name;
    }

    public void play(){
        System.out.println(name+":出去玩");
    }
    /**
     * @PostConstruct 当一个对象被Spring初始化完毕后,会调用被该注解标柱的方法,通知该对象已经被容器初始化完毕
     *
     */
    @PostConstruct  // 构造完毕
    public void init(){
        System.out.println("3:Spring容器将Person对象初始化完毕了,name："+name);
    }
    //销毁
    @PreDestroy
    public void preDestroy(){
        System.out.println("5:容器要关闭了,通知当前对象要在spring容器里面不再引用了而非GC");
    }

    //是所有类的的方法  是GC 调用的 来干掉这个类
    //finalize 不能有死循环  不能有耗时操作  用的时候需要谨慎
    public void finalize(){

    }



}
